package com.cw.DesignModel23.Structural.FacadePattern;

/**
 * V . 外观模式 代码示例
 *
 * 1 . 需求描述 : 实现一个购买商品的功能 , 用户提出购买某件商品 , 首先要查看库存 , 然后付款 , 最后物流发货 ;
 * ① 用户与子系统直接交互 : 首先要与仓储子系统交互检查是否有库存 , 然后与支付子系统交互支付货款 , 最后进入物流子系统获取物流编号 ; 使用这种交互方式 , 导致用户与子系统耦合度太高 ;
 * ② 引入外观类 : 将与仓储子系统 , 支付子系统 , 物流子系统之间的交互统一交给外观类进行处理 , 用户只需要与外观类对象进行交互 , 这样大大减少了用户与多个子系统之间的耦合度 ;
 *
 * 2 . 多个子系统代码示例 : 三个子系统分别处理各自业务 ;
 */
public class Main {
    public static void main(String[] args) {
        Goods goods = new Goods("肥皂");
        BuyFacade buyFacade = new BuyFacade();
        buyFacade.buyGoods(goods);
    }
    /** 最终执行结果 :
     *
     * 校验是否有库存 : Goods{name='肥皂'} 有库存
     * 使用银联支付
     * Goods{name='肥皂'} 进入物流系统 , 运单号为 31415926
     */
}

